package testes;

import java.util.ArrayList;
import java.util.GregorianCalendar;

import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;

import controller.BolaoFacade;



import bean.Bolao;
import bean.Grupo;
import bean.Jogador;
import bean.Jogo;
import bean.Rodada;



public class BolaoTest {

	private BolaoFacade bolaoFacade;
	private Bolao bolao;
	
	@Before
	public void setUp() throws Exception{
		//Inicializo os Jogadores e Grupos
		bolao = new Bolao();
		bolaoFacade = new BolaoFacade(bolao);
	}
	
	@Test
	public void testJogador() throws Exception{
		//Testa adicionar, remover e pesquisar Jogador
		
		Jogador j1 = new Jogador ("Daniel", "20/05", "Campina Grande", "Brasil", "danielfariasleite@gmail.com", "123456");
		Jogador j2 = new Jogador ("Matheus", "14/01", "Campina Grande", "Brasil", "matheus1401@gmail.com", "654321");
		Jogador j3 = new Jogador ("Claudio", "25/06", "Aracaju", "Brasil", "claudiocaj@gmail.com", "1234");
		ArrayList<Jogador> todosJogadores = new ArrayList<Jogador>();
		
		bolaoFacade.adicionaJogador(j1);
		bolaoFacade.adicionaJogador(j2);
		todosJogadores.add(j1);
		todosJogadores.add(j2);
		
		Assert.assertEquals("Lista de Jogadores Errrados", todosJogadores , bolao.getJogadores());
		
		bolaoFacade.adicionaJogador(j3);
		todosJogadores.add(j3);
		bolaoFacade.removeJogador("matheus1401@gmail.com");
		todosJogadores.remove(j2);
		
		Assert.assertEquals("Lista de Jogadores Errrados", todosJogadores , bolao.getJogadores());
		
		Assert.assertEquals("Jogador nao Encontrado", j1, bolaoFacade.pesquisaJogador("danielfariasleite@gmail.com"));
		Assert.assertNull("Jogador nao Encontrado", bolaoFacade.pesquisaJogador("matheus1401@gmail.com"));
		
	}
	
	@Test
	public void testRodadas(){
		
		ArrayList<Rodada> rodadas = new ArrayList<Rodada>();
		Jogo j1 = new Jogo("TimeA", "TimeB", new GregorianCalendar());
		Jogo j2 = new Jogo("TimeA", "TimeB", new GregorianCalendar());
		Jogo j3 = new Jogo("TimeA", "TimeB", new GregorianCalendar());
		
		Rodada r1 = new Rodada();
		Rodada r2 = new Rodada();
		
		r1.adicionaJogo(j1);
		r1.adicionaJogo(j2);
		r2.adicionaJogo(j3);
		
		bolaoFacade.adicionaRodada(r1);
		rodadas.add(r1);
		Assert.assertEquals("rodadas diferentes", rodadas, bolao.getRodadas());
		
		bolaoFacade.adicionaRodada(r2);
		rodadas.add(r2);
		Assert.assertEquals("rodadas diferentes", rodadas, bolao.getRodadas());
		
		bolaoFacade.removeRodada(r1);
		rodadas.remove(r1);
		Assert.assertEquals("rodadas diferentes", rodadas, bolao.getRodadas());
		
	}

	@Test
	public void testGrupos() throws Exception {
		ArrayList<Grupo> grupos = new ArrayList<Grupo>();
		Jogador j1 = new Jogador ("Daniel", "20/05", "Campina Grande", "Brasil", "danielfariasleite@gmail.com", "123456");
		Jogador j2 = new Jogador ("Matheus", "14/01", "Campina Grande", "Brasil", "matheus1401@gmail.com", "654321");
		Jogador j3 = new Jogador ("Claudio", "25/06", "Aracaju", "Brasil", "claudiocaj@gmail.com", "1234");
		Jogador j4 = new Jogador ("Lucas", "20/03", "Campina Grande", "Brasil", "lucas.s.sampaio@gmail.com", "987654");
		Jogador j5 = new Jogador ("Joao Paulo", "17/12", "Patos", "Costa do Marfim", "joaotargino@gmail.com", "002233");
		Jogador j6 = new Jogador ("Raquel", "10/11", "Campina Grande", "Argentina", "raquelvl@gmail.com", "777777");
		
		Grupo g1 = new Grupo("Daniel",j1);
		Grupo g2 = new Grupo("Matheus",j2);
		
		g1.adicionaJogador(j3);
		g1.adicionaJogador(j5);
		
		g2.adicionaJogador(j4);
		g2.adicionaJogador(j6);
		
		bolaoFacade.adicionaGrupo(g1);
		grupos.add(g1);
		
		Assert.assertEquals("grupos diferentes", grupos, bolao.getGrupos());
		bolaoFacade.adicionaGrupo(g2);
		grupos.add(g2);
		Assert.assertEquals("grupos diferentes", grupos, bolao.getGrupos());
		
		Assert.assertEquals("Nao contem esse grupo", g2,bolaoFacade.pesquisaGrupo("Matheus"));
		Assert.assertEquals("Nao contem esse grupo", g1,bolaoFacade.pesquisaGrupo("Daniel"));
		
		bolaoFacade.removeGrupo(g1);
		grupos.remove(g1);
		Assert.assertEquals("grupos diferentes", grupos, bolao.getGrupos());
		Assert.assertEquals("Nao contem esse grupo", null ,bolaoFacade.pesquisaGrupo("Daniel"));
																								
	}
	
}


